﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Data.OleDb; //подключение OleDb
using Domain; //подключение проекта Domain
using System.Data; //подключение System.Data, нужна ниже в коде
using Setting;

namespace Session
{
    public class BrokerPost
    {
        OleDbConnection connection; // объявление OleDbConnection
        OleDbCommand command; // объявление OleDbCommand
        Props prop = new Props();
        string dbpath;

        private void readSetting()
        {
            prop.ReadXml();
            dbpath = Convert.ToString(prop.Fields.dbpath);

        }

        private void ConnectTo() // функция подключения БД
        {
            readSetting();
            connection = new OleDbConnection(@" Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + dbpath + "; Persist Security Info = False;"); // объявление техналогии и пути
            command = connection.CreateCommand(); // Создает и возвращает объект OleDbCommand, связанный с объектом OleDbConnection.

        }


        public BrokerPost() // функция для класса BrokerPost
        {
            ConnectTo(); // вызов функции подключения
        }

        public void Insert (Dm_Post pst) // функция добавления новой записи
        {
            try
            {
                command.CommandText = "INSERT INTO T_Post (name_post) VALUES('" + pst.Name_post + "')"; // текст SQL команды
                command.CommandType = CommandType.Text; // Возвращает или задает значение, указывающее, как будет интерпретироваться свойство CommandText.
                connection.Open(); // открыте подключения

                command.ExecuteNonQuery(); // возвращает количество задействованных в инструкции строк.
            }

            catch (Exception ) 
            {
                throw;
            }

            finally
            {
                if (connection != null) // условие на проверку открытось поделючения
                {
                    connection.Close(); // закрытие подключения
                }
            }

        }

        public void Update(Dm_Post OldPst, Dm_Post NewPst) // функция обновления записи по id
        {
            try
            {
                command.CommandText = "UPDATE T_Post SET name_post='" + NewPst.Name_post + "' WHERE id_post=" + OldPst.Id_post; // текст SQL команды
                command.CommandType = CommandType.Text; // Возвращает или задает значение, указывающее, как будет интерпретироваться свойство CommandText.
                connection.Open(); // открыте подключения

                command.ExecuteNonQuery(); // возвращает количество задействованных в инструкции строк.

            }

            catch (Exception)
            {
                throw;
            }

            finally
            {
                if (connection != null) // условие на проверку открытось поделючения
                {
                    connection.Close(); // закрытие подключения
                }
            }
        }

        public void Delete(Dm_Post pst) // функция удаления записи по id
        {
            try
            {
                command.CommandText = "DELETE FROM T_Post WHERE Id_post=" + pst.Id_post; // текст SQL команды
                command.CommandType = CommandType.Text; // Возвращает или задает значение, указывающее, как будет интерпретироваться свойство CommandText.
                connection.Open(); // открыте подключения

                command.ExecuteNonQuery(); // возвращает количество задействованных в инструкции строк.

            }

            catch (Exception)
            {
                throw;
            }

            finally
            {
                if (connection != null) // условие на проверку открытось поделючения
                {
                    connection.Close(); // закрытие подключения
                }
            }
        }

        public List<Dm_Post> FillGrid() // функция для заполнения Grid
        {
            List<Dm_Post> pstList = new List<Dm_Post>(); // объявление List< >

            try
            {
                command.CommandText = "SELECT * FROM T_Post"; // текст SQL команды
                command.CommandType = CommandType.Text; // Возвращает или задает значение, указывающее, как будет интерпретироваться свойство CommandText.
                connection.Open(); // открыте подключения

                OleDbDataReader reader = command.ExecuteReader(); // объявление OleDbDataReader

                while (reader.Read()) // цикл на чтение
                {
                    Dm_Post pst = new Dm_Post(); // объявление Dm_Post


                    pst.Id_post = Convert.ToInt32(reader["Id_post"].ToString());  // чтение Id_post из БД и занисение информации в pst.Id_post               
                    pst.Name_post = reader["name_post"].ToString(); // чтение name_post из БД и занисение информации в pst.Name_post


                    pstList.Add(pst); // добавление данных в List< >
                }

                return pstList; // возврат List< >
            }

            catch (Exception)
            {
                throw;
            }

            finally
            {
                if (connection != null) // условие на проверку открытось поделючения
                {
                    connection.Close(); // закрытие подключения
                }
            }

        }
    }
}
